I wonder if you could use a combination of these two ideas. Do the sub with the top 5, then concatenate those top five into a list. Then you can feed that sub query into each row like it’s own little sub query so that you would get all 5. They would be comma (or whatever character you want) delimited, and I suppose if you felt like doing the work, could pull them back out into columns again. They you would have row per customer and a column for the top, second, third etc.
Seems convoluted, but I bet it could work. (and there’s probably an easier way)