I believe your best option is to export your data to a database.
The simplest solutions are SQLite or CoreData.
I would go with CoreData as it will save you a lot of development time (you will need to spend some time to get acquainted with CoreData though). In addition, it will probably take care of your memory issues regarding holding only the objects you use in memory.
Basically, CoreData is an object graph, which mean that it lets you load portions of the graph only when needed (for SQLite store type).
From what you described, you have a single entity (row with 20 columns) that you would like to access using some kind of query without loading all the entities in the file.
The CoreData equivalent would be:
1)Define the entity in core data (once, in the model designer)
2)Create the CoreData stack (for a simple design this is automatically generated)
3)Create a NSPredicate
to select the instances you like
4)Create a NSFetchRequest
to define the access to the data
5)Execute the request on the main context using a NSFetchedReaultsController
6)Display your results
You could create a new project that uses core data and see an example of how this works