You need "placeholder" columns:
SELECT
[Path],
Foldername,
FolderSize,
[Filename],
FileSize
FROM (
SELECT
[Path],
[Filename] = CAST(NULL AS Varchar(50)),
FileSize = CAST(NULL AS INT),
Foldername,
FolderSize
FROM @Folders
UNION ALL
SELECT
[Path],
[Filename],
FileSize,
Foldername = CAST(NULL AS Varchar(50)),
FolderSize = CAST(NULL AS INT)
FROM @Files
) d
ORDER BY [Path], Foldername DESC
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden