Tables are not the issue. Browsers can display zillion-row tables with ease.
You said previously 500+ results - let’s not move the goalposts. And rather than me investigate your code, let’s both investigate refactoring a search at tiddlywiki.com:
This renders 510 links and I see no noticeable effect on performance:
\define click-actions()
<$action-navigate $to=<<dom-data-link>> />
\end
<$eventcatcher selector=".my-link" $click=<<click-actions>>>
<$let f="[all[tiddlers]!is[system]search:text[tiddlywiki]]">
Count: <$count filter=<<f>>/>
<$list filter=<<f>> variable=link>
<div class="my-link" data-link=<<link>>><$text text=<<link>>/></div>
</$list>
</$let>
</$eventcatcher>
<style>
.my-link { color:hotpink; }
</style>
You can make the filter return thousands of results and perhaps bring the performance down a little. But I guarantee, if you try the slower one using regular search code it will be much slower.
The key is to look at the dom inspector. In regular code you can see the event wiring – a click handler for each link (510 event handlers!). With $eventcatcher ONE.