у вас есть два варианта:
(1) является своего рода традиционным: иметь один CF (columnfamily) с вашими объектами foo, одну строку на foo, один столбец на поле. затем создайте два индексных CF, где ключ строки в одном - это строковые значения, а ключ строки в другом - lookup_id. Столбцы в строках индекса являются идентификаторами. Таким образом, вы делаете GET для индекса CF, а затем возвращаете MULTIGET для идентификаторов.
Обратите внимание, что если вы можете сделать id таким же, как lookup_id, у вас будет на один индекс меньше для поддержки.
Клиенты высокого уровня, такие как lazyboy Дигга (http://github.com/digg/lazyboy), будут автоматизировать ведение индекса CF для вас. Сама Кассандра не делает этого автоматически (пока).
(2) аналогично (1), но вы дублируете все объекты foo в подколонки строк индекса (то есть столбцы верхнего уровня индекса являются суперколонками). Если вы на самом деле не запрашиваете сам идентификатор foo, вам вообще не нужно хранить его в собственном CF.