Като се има предвид, че заявката вече е доста проста, опциите, които бих разгледал, са ...
- План за изпълнение (за намиране на липсващи индекси, които бихте могли да добавите)
- кеширане (за да се гарантира, че SQL вече има всички данни в RAM)
- денормализация (за да превърнете заявката в плосък избор)
- кеширайте данните в приложението (за да можете да използвате нещо като PLINQ върху него)
- Използвайте магазин на базата на ram (redis, еластичен)
- Корекции на файлова група (физически преместете db към по-бързи дискове)
- Разделете таблиците си (за да разпределите необработените данни върху множество физически дискове)
Колкото по-надолу слизате в този списък, толкова по-ангажирани стават решенията. Предполагам, че зависи колко бърза трябва да бъде заявката и колко ви е необходимо решението ви за мащабиране.