É muito simples:use
UNION ALL
em vez de UNION
. SELECT * FROM (
SELECT name,total,rate
FROM business b
WHERE rate > 100
ORDER BY total DESC) x
UNION ALL
SELECT * FROM (
SELECT name,total,rate
FROM business b
WHERE rate <= 100
ORDER BY rate ASC) y
UNION ALL preserva a ordem conforme codificada.
UNION remove duplicatas e não garante a ordem. A maioria dos bancos de dados realmente classifica a saída (para facilitar a detecção de duplicatas).