Это много узлов, но вы пытались вызвать BeginUpdate (), а затем EndUpdate (), когда добавили список узлов в древовидную структуру? Возможно, это немного повысит вашу производительность!
http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.beginupdate.aspx
В таких приложениях я склонен реализовывать такие функции, как «поиск по мере ввода», которые возвращали бы имена категорий по мере их ввода в текстовое поле. Например, при каждом нажатии клавиши я бы возвращался в БД и возвращал первые 10 или около того значений, которые начинаются с того, что находится в текстовом поле. Если результатов более 10, я либо указываю, что больше результатов, либо говорю им, чтобы они уточнили свой поиск. Прямой поиск в IMO всегда важнее сортировки и / или подкачки. Я ненавижу пейджинг. Почти всегда признается, что ваша функция поиска недостаточно хороша!