部分インデックスを使用して、「&」がインデックス可能な演算子(afaik)ではないという事実を回避できます。
CREATE INDEX vendors_typeA ON vendors(id) WHERE (type & 2) > 0;
CREATE INDEX vendors_typeB ON vendors(id) WHERE (type & 4) > 0;
もちろん、新しいタイプを追加するたびに、新しいインデックスを追加する必要があります。これが、データを関連付けテーブルに展開し、適切にインデックスを作成できる理由の1つです。トリガーを記述してビットマスクテーブルを追加で維持することはいつでも可能ですが、データがはるかに明確になるため、多対多のテーブルを使用して実際にデータを正常に維持します。
スケーリングとパフォーマンスの全体的な評価が「私は何百万もの行を持っているかもしれない」と言うことである場合、あなたはこの種の最適化に取り掛かるのに十分なことをしていません。最初に適切に構造化された明確なモデルを作成し、後でそのパフォーマンスに関する実際の統計に基づいて最適化します。