Minimize the number of tables that you use to store properties by mapping multiple interfaces to the same table. To do this, before you commit the transaction that is used to create your information model, set the TableName property for each interface definition object to the same name. Since the engine must issue a separate SQL query for each table it accesses, reducing the number of tables reduces the number of database round-trips. However, this may cost some space for objects that don't support or populate all the interfaces.
An application can have multiple Repository instances (i.e. database sessions) open at the same time. Although objects are not shared between sessions, cached rows are shared. This offers some opportunities for increased parallelism.
It is worth caching the result of IRepositoryItem::Interface rather than calling it many times in a row on the same object and interface. This avoids the cost of a COM object creation and type information lookup.