algo como
Select * from TableName where Name Like 'Spa%'
ORDER BY case when soundex(name) = soundex('Spa') then '1' else soundex(name) end
debería funcionar bien
en realidad esto funcionará mejor
Select * from TableName where Name Like 'Spa%'
ORDER BY DIFFERENCE(name, 'Spa') desc;
FWIW Hice algunas pruebas rápidas y si 'Nombre' está en un ÍNDICE NO CLUSTERADO, SQL usará el índice y no hará un escaneo de tabla. Además, LIKE parece usar menos recursos que charindex (que devuelve resultados menos deseables). Probado en sql 2000.