Нужно разобраться, где тормоза.
Механизм вообще-то такой: SQL разбирает запрос, проверяет наличие табличек, полей и т.п., далее - чего нет в кэше - дочитывается с винта(-ов)(!).Далее получившаяся сырая куча сортируется (это все еще Prepare идет), и только после этого сливается к клиенту (fetch).
Т.е. :
1. Разбираемся, где тормоз - на сервере (время Prepare) или же на клиенте (время fetch)
2. Если на сервере:
- смотрим планы запросов, стараемся избежать Natural, как огня

.Если надо - доделываем нужные индексы.
- лезем в perfmon (счетчики MSSQL для него надо доинсталлить, если не инсталлены), смотрим - кэш-хит. Если более 60% - разбираемся с собственно синтаксисом запроса - получается, что проц зверски молотит крохотный объем данных, что не есть хорошо. Если менее 50% - наращиваем ОЗУ и объем оного, выделенный под MSSQL. Кстати объем этот желательно зафиксировать и в разумных пределах - дабы свапом вместо работы не заниматься

.
Посмотрите, попробуйте, отпишитесь - может, еще что скажу...
