If the file is too large to fit into system memory and you have lots of threads that need to read the whole file, there is a good chance that your application is going to be limited by the disk I/O ... no matter how you read the file, and no matter how smart the OS is.
If this is unacceptable, then you'll need to come up with an alternative architecture for your application. For example, you might convert the file into a different form that allows the threads to fetch the information they need w/o reading the entire file. Or you might turn the application into separate processes running on separate machines, each with their own copy of the file. A third possibility would be to add a thread whose sole purpose is to read and buffer the file, and have the existing threads read from the buffers. (By having the worker threads all work on the same region of the file, you avoid the OS from having to read parts of the file from disk multiple times. If the application is really disk-bound, this may speed it up.)
However, all of this is conjecture. It is hard to give decent advice without more information on the application and the file it processes.
EDIT: based on your follow-up comments, it seems that the threads don't need to access all of the file after all. My first suggestion is moot (you are all ready doing that!), and my third suggestion won't help. I suggest that you do as @Jon Skeet says and implement the system in a simple way. Then if there are performance issues, look for ways to make it faster/better. For example:
- Consider implementing an in-memory cache of recent queries and their results.
- Consider using multiple machines, and partitioning the index file by keyword range so that each part will fit into memory on one machine.
- If you support complex queries, consider splitting them into simple ones and sending the simple queries to different machines (e.g. based on keyword partitioning) then combining the result-sets.
- Consider ways to avoid computing huge result-sets when the user only wants to look at the first few results.
I borrowed an interesting textbook on indexing from a colleague a couple of years ago. I think it was Managing Gigabytes by Witten et al.