Только вот 2 мне не нравиться ;) ... WHERE person_id IN (^person.menu{$person.id}[,]) ... там person он 500 и до нескольких тысяч, а вы, помойму сами говорили, что это плохо!.
Сделаю без person_id IN (^person.menu{$person.id}[,]) т.к. привязаных персон максимум 20 ;)