OK let's look at some possible solutions and their tradeoffs
1. Pointbase has a database for devices and also has a neat server tool for updating when the device is connected. Might be your solution in one product. Trade-off, it costs money.
2. How much data are they really going to be looking for. Maybe a small subset of the data is stored locally for those times that they aren't connected. Trade-off - if they need something that isn't locally they are well SOL.
3. Definetly use lazy loading so that all the data isn't in memory at one time. If all the data is stored locally provide a "file reading" way to get to the data, and only store the most used data in memory (caching) You could even try to implement some form of caching similar to the data that Oracle stores in the SGA for faster querying. Trade-off, more code for you to write.
Hope that helps.
Mark