Как создать уникальный индекс с условием?
Прямо-таки буквально так и делается

create unique index on tablename (contractor_id) where is_main;
Можно сделать индекс сразу по двум столбцам:
CREATE TABLE example (
    id SERIAL PRIMARY KEY,
    contractor_id INT NOT NULL,
    is_main BOOLEAN NOT NULL,
    UNIQUE (contractor_id, is_main)
);
https://www.postgresqltutorial.com/postgresql-uniq...
или
CREATE UNIQUE INDEX CONCURRENTLY contractor_id_main ON table_name (contractor_id, is_main);