You are right ... the 2 char abbreviation is really not necessary it should be removed from the array (just use the ordinal index)
Code:
$CountriesArray[] = _('Andorra');
$CountriesArray[] = _('United Arab Emirates');
$CountriesArray[] = _('Afghanistan');
$CountriesArray[] = _('Antigua & Barbuda');
.
.
.
and store the text of the country as we always have - the language should be the language of the business as it is stored in the db.
Well I think the labeling of the address fields are slightly different as they are part of the user interface - if they are stored in the db then they will not change when the user changes their language.... this is not ideal IMEO :-)
Maybe just hard code 'em in the way that suits the do'er of the do'ocracy - a business that wishes to work another way can modify them very easily as the code is so easy to read :-)