en plus des index "avec conditition" (je connais pas, faudra que je jette un oeil), tu peux créer des "partitions".
les partition sont un moyen efficace pour découper de façon transparente des tables volumineuses. ça se base sur des ruptures de champ.
par exemple, dans une table de contrat, j'imagine que les contrats résiliés sont peu utilisés. idem pour les contrats sans mouvement depuis 1 an par exemple.
du coup tu peux créer un partitionnement sur ces deux critères, et ainsi bénéficier de 4 partitions. ainsi les enregistrements actifs de moins d'un an seront regroupés dans une sorte de "mini table" qui sera très rapide à utiliser, sans pour autant remettre en question la structure de la base.