It'd be nice if there were a mention of optimizing bookmark lookups instead of just elimination. A narrow index often will produce rows much faster than even a clustered index--especially when seeking on wide tables. Likewise covering too many columns slows index performance.
An alternative is to put narrow non-clustered indexes on separate spindles. This helps immensely, especially when the results must have too many columns to cover--just put join and predicate columns in the non-clustered index, and be sure it's on separate spindles than the data.