The solution proposed looks absolutely fine - unless your initial problem was tempdb space, in which case you're just as likely to get the problem when the temporary table is loaded.
Is there any value that you can use to divide the source table into (approximately) equal chunks? For example, I had to grab 1.4M rows from one table to another to build a test set. Fortunately there's an ID number, so I was able to grab the rows by their trailing digit (i.e. mod 10) using
"Where ID - 10 * Floor(ID / 10) = 0".
If that's no good, what about dates? Or a character column? Anything that you can use to create useful subdivisions.
HTH,
Mike