No pensé que esto fuera posible, pero encontré una entrada de blog aquí que parece hacer el tipo de cosas que buscas:
SELECT id FROM table WHERE id in (7,2,5,9,8)
ORDER BY FIND_IN_SET(id,"7,2,5,9,8");
dará resultados diferentes a
SELECT id FROM table WHERE id in (7,2,5,9,8)
ORDER BY FIND_IN_SET(id,"8,2,5,9,7");
FIND_IN_SET
devuelve la posición de id
en el segundo argumento que se le da, por lo que para el primer caso anterior, id
de 7 está en la posición 1 en el conjunto, 2 en la 2 y así sucesivamente - mysql internamente funciona como
id | FIND_IN_SET
---|-----------
7 | 1
2 | 2
5 | 3
luego ordena por los resultados de FIND_IN_SET
.