Как отмечалось в других ответах, Union выполняет дополнительную работу по удалению дубликатов, Concat просто объединяет последовательности.Однако, как я уже отмечал в комментарии выше, производительность глубоко вложенных конкатов снижается.Вы можете также рассмотреть возможность использования SelectMany, чтобы сгладить группу итераторов:
var carLists = new[]{GetRedCars(), GetGreenCars(), GetBlueCars()};
var allCars = from carList in carLists
from car in carList
select car;
foreach(var c in allCars) { ... }
Возможно, вы обнаружите, что это более гибко, если вы обнаружите, что на самом деле у вас есть более трех списков для итерации.