Dato che la query è già abbastanza semplice, le opzioni che cercherei sono ...
- Piano di esecuzione (per trovare eventuali indici mancanti che potresti aggiungere)
- Memorizza nella cache (per garantire che SQL abbia già tutti i dati nella ram)
- denormalizzazione (per trasformare la query in flat select)
- Memorizza nella cache i dati nell'applicazione (quindi potresti usare qualcosa come PLINQ su di essa)
- Utilizza un negozio basato su ram (redis, elastico)
- Regolazioni del gruppo di file (sposta fisicamente il db su dischi più veloci)
- Separa le tue tabelle (per distribuire i dati grezzi su più dischi fisici)
Più scorri in basso in questo elenco, più le soluzioni diventano coinvolte. Immagino dipenda dalla velocità con cui hai bisogno della query e da quanto hai bisogno di scalare la tua soluzione.