Запрос, который выбирает только несколько полей, может полностью выполняться в индексе. Например, если у вас есть индекс (OrderId), для этого запроса потребуется поиск в таблице:
select Status from Orders where OrderId = 42
Но если вы добавляете составной индекс (OrderId, Status), механизм может извлечь всю необходимую ему информацию из индекса.
Для сортировки по нескольким столбцам может быть полезен составной индекс. Например, индекс для (LastName, FirstName) будет полезен для этого запроса:
select * from Orders order by LastName, FirsName
Иногда у вас есть уникальная константа в нескольких столбцах. Скажем, например, что вы перезагружаете номера заказов каждый день. Тогда OrderNumber не является уникальным, но (OrderNumber, OrderDayOfYear) является. Вы можете применить это с помощью уникального составного индекса.
Я уверен, что есть много других применений для составного индекса, просто перечислю несколько примеров.