Colossal, actually, and scales up at *best* directly in proportion to the size of the forum, worst case exponentially to the size of the forum. Let me explain the problem.
SQL works on relationships, joining tables together. As such, you build indexes, a list of what items are in a given table. And when you join, you look up against that table.
Which means, when you start from the topics table and link to the messages table, you've got a map as to where things are.
Now, this is where the butthurt begins. You build a list of the items you have, not a list of items you don't have.
So you build a list of topics and have to compare each one to the ignore list, looking for it not to exist. And since you don't have a list of what doesn't exist, every single topic has to be matched to the ignore list, one by one. IIRC the original version of Karl's mod limited you to 10 (yes, 10 TOTAL) topics to be ignored, simply because that limits how far the ignore list gets, which limits how much time is spent looking for non-matches.
If it wouldn't eat your disk insanely, it'd probably be quicker to build a list of every topic and every user and match against that.
Thing is, we already sort of have that list - in the form of the unread topics list, which my hack - well - hijacks in a not so good way.