Esto pasa porque SELECT dato FROM tabla WHERE SUBSTRING(dato,1,1) es esto:
1.- abre tabla
2.- hace el where (lo que hace es buscar segmentadamente en todos los registros)
3.- muestra dato
En cambio SELECT dato FROM tabla WHERE dato LIKE 'a%'
1.- abre tabla
2.- hace el where (busca en todos los registros segun la regla a% por lo tanto la validacion del dato es "verdadero o falso" y no pasa a verificar la cadena en el registro completo)
3.- muestra dato
Si haces un LIKE '%a%' y todos los registros tienen una a y haces un substring de una letra... deberia demorarse practicamente un poco menos el like por el hecho de que la busqueda va a retornar todos los registros PERO se mantiene la regla de verdadero y falso y no sigue buscando la cadena en el registro.
No se si se entendio pero lo agrego como dato para el que lo necesite xD
Suerte!