Как в mysql сделать уникальный индекс при таком условии?
Сделайте is_main NULLABLE и замените везде 0 на NULL. NULL-ы всегда уникальные, если можно так выразиться) Поэтому уникальный индекс по item_id + is_main будет ОК.
Повесить триггеры BEFORE INSERT и BEFORE UPDATE и обнулять поле, если запись с 1 уже есть в базе. Ну или наоборот, обнулять 1 в базе, если вставляется/меняется запись с 1.