A suggestion from IRC: allow the chainstate cache to use unused mempool memory.
If the mempool is not completely full, treat the difference between the maximum size and the actual usage as available for the coin cache.
This also changes the early flush trigger from (usage > 0.9 * space) to (usage > 0.9 * space && usage > space - 100MB). This means we’re not permanently leaving 10% of the space unused when the space is large.