The node that hid behind its loop count
The Index Scan shows 1.598 ms and ran 2,000 times, so it accounted for 3.2 seconds. The Seq Scan shows 45 ms and looks worse. Reading the printed numbers as totals sends you to the wrong node.
Nested Loop (cost=0.42..8234.19 rows=1 width=64) (actual time=0.031..1612.443 rows=980 loops=1)
-> Seq Scan on orders (cost=0.00..4521.00 rows=1000 width=32) (actual time=0.010..45.221 rows=980 loops=1)
Filter: (status = 'open'::text)
Rows Removed by Filter: 199020
-> Index Scan using idx_items_order on items (cost=0.42..3.70 rows=1 width=32) (actual time=0.800..1.598 rows=1 loops=2000)
Index Cond: (order_id = orders.id)
Planning Time: 0.180 ms
Execution Time: 1615.220 ms