> When you say beware of the cardinality, do you think that the
cardinality is too low in this instance?
Secondary indexes in C* are distributed across all the nodes containing actual data so somehow it helps avoiding hot spots. However, since there are only 2 values for your boolean flag, even with good distribution, all indexed values will be concentrated on only 2 partitions (one for "true" and one for "false") on the same node and you may run into very wide row.
Keeping manual secondary index on this flag does not help much either, because of the binary distribution.
Saving data in 2 colum families is similar to having a composite partition key (id,flag) like I mentioned before but it does not solve your requirement to be able to paginate through all values of (id,flag). Maybe you should create another column family with bucketing to support just this query.
Anyway, there is no magic with C*, the more different ways you want to query the data, the more column families and denormalization you need
Duy Hai DOAN