Unfortunately getting rid of the long IN lists would require a more substantial rewrite than I'm chartered to do, so I guess Tom Kyte's solution will have to do. It is fast enough now, I just worry how it will degrade as the lists get even longer.
Yes, I know. I was going through the portal code trying to track down where the in lists get created (with the idea of putting that into a mapping table) but I gave up after a couple of hours.