Делаете many to many, храните в профиле пользователя последнее время обновления избранного, сам список избранного храните в горячем кеше, например redis. При инициализации профиля выгребаете из кеша список избранного, или, если кеша нет или он просрочен относительно даты в профиле - актуализируете из базы. Кеш избранного будет в виде массивов id объектов, для определения "избранности" проверяете вхождение id объекта в массив.
На чем делать - Yii, Django, Rails, Kohana - нет решительно никакой разницы, если владеете инструментарием.