I'm not qualified by any means to answer just trying to help and learn at the same time so treat this comment accordingly.
The line 22 in bitcoin/src/util/readwritefile.cpp suggests that it reads the file in 128 byte portions unless it's the end of the file. Could it be the case?
At the same time I would assume that any modern OS is capable to manage this transparently and efficiently without user intervention so just for my curiousity why you think this might be the bottleneck?