Alright with that off I get:
'Nested Loop Anti Join (cost=25.76..21210.81 rows=16684 width=106) (actual time=0.688..249.585 rows=26994 loops=1)'
' -> Hash Join (cost=25.34..7716.95 rows=21906 width=106) (actual time=0.671..124.663 rows=28467 loops=1)'
' Hash Cond: (cp.claim_id = x.claim_id)'
' -> Seq Scan on claim_product cp (cost=0.00..6714.76 rows=202076 width=106) (actual time=0.016..55.230 rows=202076 loops=1)'
' -> Hash (cost=14.04..14.04 rows=904 width=16) (actual time=0.484..0.484 rows=904 loops=1)'
' Buckets: 1024 Batches: 1 Memory Usage: 51kB'
' -> Seq Scan on _claims_to_process x (cost=0.00..14.04 rows=904 width=16) (actual time=0.013..0.235 rows=904 loops=1)'
' -> Index Only Scan using claim_product_reason_code_active_range_idx on claim_product_reason_code r (cost=0.42..0.61 rows=1 width=16) (actual time=0.004..0.004 rows=0 loops=28467)'
' Index Cond: (claim_product_id = cp.claim_product_id)'
' Filter: (claim_reason_type = ANY ('{REJECT,OVERRIDE,RECALC}'::enum.claim_reason_type[]))'
' Rows Removed by Filter: 1'
' Heap Fetches: 27031'
'Planning time: 0.984 ms'
'Execution time: 253.976 ms'
Way better.