Since every spend actually exists in the table, every one of the 2.5B spends results in a read from the table body, even without hashmap conflicts. Of course this excessive paging also slows the block/prevout queries, but even so that only amounts to about 11% of time. Final confirmation about 5%, and validation takes up the rest. Without heavy paging, validation is about 90%.