I've implemented the change above, making the spend table into a pure index and moving its values to the point table. This required a net increase of 5.3GiB overall, after the removal of the hashmap in the point table, and the net increase of 3 bytes per spend due to redundant storage of the input.point.index in the spend index and the point table. The schema and query changes were pretty significant, affecting a lot of tests. So I'm going to run through it first and see how it looks before burning the time on test updates.
Otherwise the net result is a change in relative size of the two tables. Previously point and spend were 94 and 63 GiB respectively. Now they are 126 and 39GiB. This is the intended reduction of the spend index, as it is used for exhaustive search. This should cut paging by at least 40%. However there are other query simplifications that should reduce paging even further.