作成するインデックスの最初の列としてアカウント識別子を追加する必要があります。これにより、最初にそのアカウントに属する行に検索が絞り込まれます。gistまたはginフルテキストインデックスの場合、btree_gistまたはbtree_gin拡張機能をインストールする必要があります。
最初の文字だけを検索する必要がある場合、最も簡単でおそらく最も速いのは、両方の列のテキスト操作をサポートする通常のbtreeを使用し、2回の検索を行うことです。text_pattern_ops opclassを使用してテキストプレフィックスクエリをサポートし、大文字と小文字を区別しないようにフィールドをlower()する必要があります。
CREATE INDEX contacts_firstname_idx ON contacts(aid, lower(firstname) text_pattern_ops);
CREATE INDEX contacts_lastname_idx ON contacts(aid, lower(lastname) text_pattern_ops);
クエリは次のようになります。
SELECT * FROM contacts WHERE aid = 123 AND
(lower(firstname) LIKE 'an%' OR lower(lastname) LIKE 'an%')