Are you using a database or some form of in-memory data storage? If you are using a database there shouldn't be a problem. If you are storing the data in memory you could still use a database (SQLite allows in-memory storage - use ":memory:" for the file name). If, despite the terms you have used, you aren't database savvy, use a hash keyed by the inhouse ID as the table with a hash per row containing the data, then use a lookup hash per other indexed column which gives the inhouse ID as the value. Wrapping the various hashes up in an object makes good sense.
True laziness is hard work