qualcosa come
Select * from TableName where Name Like 'Spa%'
ORDER BY case when soundex(name) = soundex('Spa') then '1' else soundex(name) end
dovrebbe funzionare bene.
in realtà funzionerà meglio
Select * from TableName where Name Like 'Spa%'
ORDER BY DIFFERENCE(name, 'Spa') desc;
FWIW Ho eseguito alcuni test rapidi e se "Nome" è in un INDICE NON CLUSTERED SQL utilizzerà l'indice e non eseguirà una scansione della tabella. Inoltre, LIKE sembra utilizzare meno risorse di charindex (che restituisce risultati meno desiderabili). Testato su sql 2000.