All indexes have advantages and disadvantages:
Disadvantages:
- they take up disk space
- they need to be maintained (the balance of
the index tree needs to be reorgansised periodically to ensure any
query optimisation is not using bum data distribution) which may
mean they need to be taken off line -- bad news if they are busy
- they need time to update on the fly if there are frequent inserts
Advantages:
- Properly designed, they can eliminate expensive table scans
- Properly designed, (a covering index) they can elimiate any table read.
So as ususual it depends.
- Too many indexes can dramatically slow write performanace
- Too many indexes can dramatically increase dispace usage
- Not the right index can dramatically decrease read performance
Some people make a very good living out of really knowing their stuff about indexes:
There is immensely good stuff here http://www.insidesqlserver.com/
So it depends how often users are returning data referenced by the index vs how often they are updating the data contained via the index.
Indexes for sparse columns are no different, however where the column is (largely) empty then filtered indexes are more efficient. Once the sparesness decreases (eg 50/50) then the distribution of the data can become very important when the optimiser decides on the best plan to return the data. A filtered index will not know the distribution for data outside the filter - bit obvious but needs to be said.