Just open the file yourself to read the blocks (without using the built-in TStringList functions) and read the first block of the file, and then you can, for example, load this block into a string list with strings. SetText () (if you're using block functions) or just strings. LoadFromStream () if you load blocks using streams.
I would just go with the file functions FileRead / FileWrite and load the block into the buffer. You can also use the similair winapi functions, but this is just more code for no reason.
The OS reads files in blocks of at least 512 bytes in size on almost any platform / file system, so you can read 512 bytes first (and hope you get all 10 lines, which will be true if your lines are generally short enough). It will be (practically) as fast as reading 100 or 200 bytes.
Then, if you notice that your string objects only have less than 10 lines, just read the next 512-byte block and try to parse again. (Or just go with blocks of 1024, 2048, etc., On many systems, this will probably be as fast as 512 blocks, since file system clusters are usually larger than 512 bytes in size).
PS. In addition, using streams or asynchronous functions in the functions of the winapi file (CreateFile, etc.), you can load this data from files asynchronously, and the rest of your application works. In particular, the interface does not freeze while reading large directories.
This will speed up the loading of your information (since the list of files will be downloaded directly, and then after a few milliseconds the rest of the information will be displayed), although it does not actually increase the real reading speed.
Do this only if you have tried other methods, and it seems to you that you need an additional impulse.