Without knowing anything about the tables or the queries it is impossible to give any precise help, but I can only discuss in general terms.
The UNION operator will by default perform a DISTINCT operation. Consider this:
DECLARE @a TABLE (a int NOT NULL)
DECLARE @b TABLE (a int NOT NULL)
INSERT @a (a) VALUES(1), (1), (2), (3)
INSERT @a (a) VALUES(3), (4), (5), (5)
SELECT a FROM @a
UNION
SELECT a FROM @b
SELECT a FROM @a
UNION ALL
SELECT a FROM @b
The first SELECT returns 1, 2, 3, 4, 5. That is the distinct values. On the other hand, the second query returns 1, 1, 2, 3, 3, 4, 5, 5. That is, all rows.
The UNION operation itself typically does not require a lot of tempdb space. But the operation of weeding out the duplicates certainly can require a lot of disk space. Particularly, if the memory grant for the query is too low. (The memory grant is a result of the optimizer's estimates.)
Introduction of this staging table does not sound like a fruitful approach. What would be a good way to deal with this query is more difficult to say without further knowledge. Possibly, use UNION ALL and have other conditions filtering out lots of rows before applying DISTINCT. But then again, this means that these operators will have to work on more rows, so I am not very optimistic about that approach.