можно оптимизировать так: по умолчанию считаем все посты полностью прочитанными, но когда создаётся пост прописывать для всех юзеров время прочтения = текущее. а каждый день вычищать все такие записи, которые старше, допустим, года. тогда при 500 юзерах и 150 постах в год получаем единовременно не более 75000 записей. при посещении запись конечно обновляем/добавляем, но это мелочи.