Obecnie MySQL wykonuje wszystkie selekcje w unii, nawet jeśli w kilku pierwszych zapytaniach jest wystarczająca liczba wierszy, o czym wspomniał @Yuki Inoue w swojej odpowiedzi. Korzystając z odpowiedzi @user1477929, możesz przepisać swoje zapytanie jako:
(SELECT a FROM t1 WHERE a=10 AND B=1 LIMIT 1000)
UNION ALL
(SELECT a FROM t2 WHERE a=11 AND B=2 LIMIT 1000)
UNION ALL
(SELECT a FROM t3 WHERE a=12 AND B=3 LIMIT 1000)
ORDER BY a LIMIT 1000;
co da maksymalnie 1000 wierszy i nigdy nie zeskanuje więcej niż 3000.