Может я не правильно проблему понял, но разве нельзя просто сделать так:
Есть таблицы: Пользователи Таблицы Действия Лог
Таблица Лог: id user_id action_id target_id datetime comment
action_id связано с таблицей таблицы - в таблицах хранятся названия таблиц, которые логируются, в Действиях - названия действий для этих таблиц типа Оплатил заказ, поднял в топ, сменил логин и тп.
В итоге чтобы отрисовать 100 записей, достаточно сделать 1 запрос с 3 join или 4 отдельных запроса.
select * from log l
join users u on u.id = l.user_id
join actions a on a.id = l.action_id
join tables t on t.id = a.table_id
В коммент можно сохранить текстовое описание действия типа "Вася удалил запись" или же diff в качестве json или какие-то варианты на эту тему.