[~BUGFIX] Implemented the indexer somewhat different, works with all sources instead of only array

I think this is more performant, it only loops through the source one more time instead of seeking each product.

@avstudnitz Can you validate that is also works with the array adapter, I don't have an array source present. I see no reason it shouldn't but we don't want to break things :+1: