getItemIndex возвращает индекс конкренного ЭКЗЕМПЛЯРА твоего объекта.

Код:
var a:Object = { par1 : 1, par2 : 2}
var b:Object = { par1 : 1, par2 : 2}
var linkToA: Object = a;
trace(a==b) //false
trace(a==linkToA) // true
почему так?
потому что a и b хранят ссылки на ячейки памяти с данными, а не сами данные.
Со стороны кажеться что у a и b одинаковые данные, но они храняться в разных ячейках памяти. При их сравнении сравниваеться не данные на которые они ссылаються а именно адреса этих ячеек памяти.
a==linkToA - true потому что мы linkToA присвоили значение адреса ячейки памяти.
Если бы ты програмил на Assembler, C/C++, Pascal на худой конец, для DOS то было бы легче с этип разобраться - там "осязаемые" ячейки памяти. В As3 тоже самое, только эти ячейки не такие очевидные.
Поэтому ты не можешь просто получить индекс элемента зная его данные, ты должен знать именно "ссылку" на этот элемент.
Для твоего случая __etc все верно описал.