I wrote a similar log viewer app but used a different approach.
I perform an initial parse into a class like your LogLine and store them in a list. Then as the user chooses various filter combinations, I use Linq to build an IEnumerable of filter matches which is bound to an items control (in my case a ListView). You could use an ObservableCollection and clear / populate with the same results if you prefer.
I just tested with a 31MB file (240k lines) and the results are displayed in under a second when changing the filter.