Если у вас один ключ и два значения, вы, вероятно, создадите класс для этих двух значений и по-прежнему будете использовать словарь.
Если у вас есть два ключа и одно значение, вы, вероятно, будете использовать вложенный словарь, то есть словарь, в котором ключ является первым ключом, а значение - другим словарем. Ключом для вложенного словаря будет второй ключ, а значением будет ваше фактическое значение.
ETA:
Теперь, когда вы прояснили свой вопрос - если вам нужен доступ к вашей коллекции как по ключу, так и по целочисленному индексу, вы все равно можете использовать словарь.
Чтобы получить предмет по ключу, вы должны сделать это:
[myDict objectForKey:@"joe"];
Чтобы получить элемент по индексу, вы можете использовать массив allKeys:
[myDict objectForKey:[[myDict allKeys] objectAtIndex:1]];
Если единственной целью получения людей по индексу является цикл по всей коллекции, лучше было бы изучить использование метода keyEnumerator для перечисления ключей в цикле и использования этих ключей для поиска значений.