Eric,
I apologize in advance for the new update... when I tried to integrate the new ArrayList in my own projects, I found that I really needed to make the ArrayList key access as much as possible like the key access of the regular dictionary classes so that they would be interchangeable.
That means I renamed the key access methods to ContainsKey, GetByKey, and IndexOfKey, regardless of the actual key name. Supporting multiple different keys, as in your Item[owner, name] indexer, is therefore out of the question -- at least in the line of templates that I'm willing to support. Of course, you could always branch off another specialized ArrayList template tailored to your needs.
On the other hand, the key indexer is in -- it's controlled by a new KeyIndexer on/off property so that we don't get an unwanted clash with the existing Int32 indexer. It's just a getter, as you said, so it's basically syntactical sugar for GetByKey.
I've also added some more comments to the template and to the ReadMe file, explaining the new features, and KeyName now defaults to KeyType as per the .NET convention of naming properties after their types.
Cheers, Chris