First, where you keep the records? what kind of object to hold the data? If the records are from a local database, things may be a little easier.
Second, make clear how this grid should be used, then you can decide, then design the interface between grid and data with optimum buffer strategy.
Third, if the records are not of database, you'd store them with well designed storing strategy, in order to find and get the records easily and quickly, just like you are designing your own simple database( index tree, physical storage,..). you know, 10 million is not a small number, an operation as simple as moving pointer may take you several minutes if it's poor designed.