ReadSettings is not unreasonably slow - I measured that it takes about a millisecond for every 10 lines of data that it parses, but you can still speed this up by turning off some Parser Engine Modes.
It shouldn't matter much about the time taken by ReadSettings, however, because this is done before gameplay starts, not during.
Lookups of variables can be slower though - and if you can help it, cut down on realtime lookups. I measured 550 Milliseconds for 1,000,000 lookups of a VirtualInteger 10th in the list, which is reasonable, but there's no excuse not to Optimize:
Hard-mapping the Variables is probably the best solution: instead of using VirtualString("myvar") to display the same text every loop, store it in a cobra variable and display that instead so that the program doesn't have to do the lookups.
Also, free any VirtualVariables that you are done with, otherwise you waste time looping through them each lookup.
If at all possible, load fast-access VirtualVariables first and less important ones last.