UNION betekent UNION DISTINCT en dit is relatief traag omdat er wordt gecontroleerd op duplicaten, ook al zijn die er niet. U wilt UNION ALL:
SELECT *, 0 AS head FROM foo WHERE id IN (1,2,3)
UNION ALL
SELECT *, 1 AS head FROM foo WHERE id NOT IN (1,2,3)
ORDER BY head, created_date
Ik kan me voorstellen dat er na deze wijziging niet veel verschil in prestatie is tussen de drie queries. De beste manier om er zeker van te zijn, is door het te meten.