Una forma
SELECT *,1 as SortOrder FROM table1
UNION
SELECT *,2 FROM table2
UNION
SELECT *,3 FROM table3
UNION
SELECT *,4 FROM table4
order by SortOrder
lo que sucede es que está utilizando UNION, el servidor sql luego hace que el conjunto de resultados sea distinto, para hacerlo necesita ordenar las tablas
¿UNION ALL
marcar la diferencia?