Я сперва список предложил заменить на что-то другое, потому что ты к элементам по индексу обращаешься. В фшарпе список односвязный, так что доступ по индексу медленный, сложность O(n).
Ещё ToLower() выглядит ненужным, но тут тебе виднее.
У String.Split есть второй параметр
StringSplitOptions. Тебя интересует RemoveEmptyEntries, чтобы потом не фильтровать