Using undo data for a block (rev?????.dat) we can retrieve value information about prevouts and calculate the final transaction fee (rate). This approach is about 80x faster, drops the requirement for -txindex, and works for all non-pruned blocks.
https://github.com/bitcoin/bitcoin/pull/14802/commits/d20d7567528e216badb8475df298bb3cec008985
Depends on D6304
Backport of Core PR14802