Two points. One, you don't need all the order bys, the last one is all you need, and you can do union ALL since they will all be distinct rows. regular unionx do an extra sort / unique step that you don't need here. Also, the use of limit in the queries might need it to stay a set of subselects. If so, then just add the parens back in that I took out.
SELECT name, level, last_online
FROM table
WHERE level = 0
LIMIT 10
UNION ALL
SELECT name, level, last_online
FROM table
WHERE level = 1
LIMIT 10
UNION ALL
SELECT name, level, last_online
FROM table
WHERE level = 2
LIMIT 10
ORDER BY last_online DESC
If you need subselects, this should work:
select * from
(SELECT name, level, last_online
FROM table
WHERE level = 0
LIMIT 10
UNION ALL
SELECT name, level, last_online
FROM table
WHERE level = 1
LIMIT 10
UNION ALL
SELECT name, level, last_online
FROM table
WHERE level = 2
LIMIT 10) as a
ORDER BY a.last_online DESC