Prisoner
не знаю. Если нормально организовать данные, то выбор на лету не должен занимать много времени (не больше, чем при выводе список тем любого другого реального форума)
в принципе с set - это я хватанула. Только 64 элемента в массиве - мало. Можно в принципе просто тупую таблицу создать типа:
id -- id юзера (не уникально, может повторяться)
topic_id -- id выбранной темы
с индексом по тому и по другому
а потом просто:
Код:

SELECT v.id, ft.name
FROM virtual v, forum_topics ft
WHERE v.topic_id=ft.id AND
v.id = номер id нашего юзера
ORDER BY ft.name; -- (те сортировать все это добро по алфавиту)
А дальше работать с этим, как с обычным списком тем за одним исключением - нельзя создавать новую тему (тк нет реального номера (id) форума)
А в другие (открытые для записи, конечно) можно постить - они лягут на место и все остальные, и этот юзер в том числе увидит новые сообщения и в обычных форумах.