А вы как хотели? Конечно интерфейс будет виснуть, вы напрямую с потоком UI работаете, коллекцию фильтруете на лету. Есть несколкьо атрофированный класс BackroundWorker, но лучше синхронизацией контекста воспользуйтесь - она позволяет передавать данный из одного потока в другой с помощью событий. Почитайте материал, там очень много теории.