Уважаемый, Dux, если вы внимательно посмотрите в исходниках как происходит загрузка строк из текстового файла в ListBox, то будете неприятно удивлены.
Каждая строка добавляется через метод Add в цикле. А что такое циклы в Delphi очень даже известно.
Никаким способом (ну, может быть, кроме приобретения суперкомпа

) ускорить загрузку 50000 строк не получится. Судя по вашим 12-ти секундам у вас еще очень шустрый компьютер.
Так же, не очень понятно как бедный пользователь будет справлятся с 50-тью тысячими строк в ListBox'е (если, конечно, эти мегабайты предназначены для ручной манипуляции с ними).
Дать рекомендации по вашей задаче возможно, только тогда, когда станет ясна задача для чего необходимо держать в памяти 5 Мб информации. А может быть, так нагружать память и не требуется?
В любом случае, если очень хочется загрузить такое количество информации придется применять изощренные методы. Например, использовать Thread'ы. Предположительно, несколько должно помочь.
Хотя я бы держал эти мегабайты в базе. Выборка нужных строк в SQL базах происходит очень быстро.