Olá,
Especificamente no caso do Oracle, pois outros BDs podem ter comportamentos diferentes…
a-) No Oracle há uma config no BD que determina isso, o optimizer_mode pode ser sempre por Índice (RULE um dia será descontinuado, mas ainda persiste) ou há a necessidade de manter um conjunto de estatísticas (qtde de linhas das tabelas) – (ALL_ROWS, FIRST_ROWS n) onde o Oracle faz uma “análise” se seria melhor um fullscan na tabela ou o uso dos índices;
b-) Não, nesse caso acho melhor você entender como funciona um índice b-tree que pode te dar uma explicação melhor que eu conseguiria colocar aqui em poucas linhas;
c-) Lembre-se sempre: índice também ocupa espaço de armazenamento e no caso de criar índices incorretos pode sempre causar mais uma lentidão do que a proposta original do índice (exemplo: indexar colunas tipo Y ou N não serve para nada a não ser atrapalhar – e acredite, já vi muito disso)
[]s Ishii