Если не секрет — вам надо тупо загрузить всё содержимое таблицы или только все подузлы одного узла (независимо от уровня вложенности)?
Если всё дерево — то списком или только корни?
Изначально проблема в том, что параллельно селекту со всей таблицы оно строит граф объектов — отсюда ваша структура. Как такового дублирования здесь нет — просто ссылки на одно и то же подразделение лежат в списке и в свежепостроенном графе. Так что ничего страшного.
Т.е. если хотите получить прекэшированное дерево — сначала забираете весь список, делаете его ToList() /*чтобы кэшировать*/ и делаете по этому списку where простым linq to objects. Вуаля
Ещё варианты:
1 — выгребать только корни + инклюдить с запасом (тысячи хватит?

). // кажется будет аццкий sql
2 — попробовать написать хранимку и выгребать данные через неё... // Весь гемморой прекрасно представляю
3 — Попытаться поискать на тему recursive LINQ queries. // куда ж без RTFM?
Если не трудно, попрофайлите SQL, что приходит на сервер при использовании .Include и киньте сюда. Может чего и наклюнется...
Да, я бы осторожней подходил к EF. В нынешнем состоянии оно не очень-то подходит для типичных десктопных приложений. Ссылка на общение с товарищем из EF team:
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/172ae667-d20a-4dbf-9e98-39b90387b4f4
Читайте — узнаете много нового. Он там рекомендует писать model view поверх EF и использовать его для биндинга etc. Т.е. биндинга из коробки и без проблем у вас не будет. Не пугает — вперёд
P.S. Боюсь что без костылей не обойтись. EF — он такой загадочный...
P.P.S. А у вас подразделения в 1 иерархии могут относиться к нескольким организациям? Во люди живут...