Is there a more efficient way to set up this table
I think your approach is reasanoble.
Because it would show online data (no need for background processing) and would only use resources from active transactions (customer not seeing anything will not need to have their data reprocessed).

I would do it using triggers. You would not have to change your existing code and you could disable/enable this new functionality more easily.

An idea:
Try to use a LRU algorithm.
Try to see the "importance" of an item. For example, adding an extra column for counting the amount of times an item as viewed.
If a user visited an item many times you could not stop showing it on this Top25 List simply because some other 24 random items were searched.