D'une manière globale ça me vas tout à fait, le seul truc qui me perturbe c'est de ne pas dissocier plus clairement les index des simples colonnes :  

* Ça oblige a utiliser une notation peu élégante de "index;column"
* Ça créé des cas particuliers dans tous les sens genre (if != index)
* Les colonnes sont liées intimement à une table, les index c'est plus général à la base de données, en parler dans les entity enfant n'est peut être donc pas approprié
* Sémantiquement parlant (oui c'est pas joli comme tournure de phrase) ce n'est simplement pas logique de méler index et colonnes.

Ne serait il pas plus approprié de créer simplement une fonction statique addIndex($index,$target) dans MysqlEntity appelée lors de l'install et on en parle plus?