procedure Form1.button1_Click(sender: Object; e: EventArgs);
Я бы первым делом проверил время выполнения при отсортированном списке (в этом случае при IndexOf используется умный алгоритм поиска, а не обычный перебор). Т. е. добавьте "L2.Sorted := True". Если результат не устроит, то экспериментируйте дальше. Например, попробуйте для L2 вместо TStringList использовать хеш-таблицу TDictionary и метод ContainsKey.
А еще у вас утечки памяти. В случае exit объекты не уничтожаются. Используйте try и finally.