Я бы рекомендовал начать с простого и затем добавить кеширование, если тестирование показывает, что восстановление отфильтрованных списков является проблемой производительности. Кроме того, код фильтрации может быть значительно упрощен с помощью встроенных в List методов фильтрации или расширений LINQ.
filtered = Me.Where(i => i.Type = type)
(Я мог бы отказаться от точного синтаксиса, я никогда не делал LINQ в VB.NET, я парень на C #).