Hi,
To answer your questions:
1) I don't think there will be any reason not to index col2/3/4...unless you want to scan the whole table everytime the query is run.
2) You should definitely handle unwanted duplicates. If they are true duplicates, a "select distinct" will help to eliminate. Otherwise it really depends on where your data comes from and whether you are inserting one row at a time (hope not)
3) If col2 will only have 5 distinct values, filtering based on that column might also take a while to complete because there will be many records with that value for col2. Splitting it out into separate tables might be an option, but I think views (indexed views if you can) might be a better choice. Have a look at performance with an index on col2 before creating views though. If performance is good enough then it will not be necessary to even bother with views.
Hope this helps.