Вы можете использовать SelectMany, которая выравнивает подколлекции:
var all = parentCollection.Select(p=>p.Name)
.Concat(parentCollection
.SelectMany(p=>p.Children).Select(c=>c.Name));
Обратите внимание, что это будет работать только с одной глубиной родительских / дочерних отношений. У вас есть настоящая рекурсия (несколько уровней), вам нужно реализовать итератор, который возвращает детей рекурсивно.
Изменить: иметь детей в правильном порядке, что-то уродливое, что работает:
var all = parentCollection.Select(p=>new {Parent=p.Name, Name = ""})
.Concat(parentCollection.SelectMany(p=>p.Children
.Select(c => new {Parent=p.Name, c.Name})))
.OrderBy(o => o.Parent).ThenBy(o => o.Name)
.Select(o=> o.Name != "" ? o.Name : o.Parent);