External ID Attribute on Custom Fields
In the Salesforce CRM user interface, you can identify up to seven (7) custom fields on an object as being an external ID field. The field type must be a text, number or email field. An external ID contains record IDs from a system outside of Salesforce. You can match against this field during importing or integration or when using the upsert call. Also, external ID fields are indexed, so selective filters on them should run quickly.
I haven't hit the limit of seven but I am still unable to mark a custom field as External. Why is this?
When a field has been designated as an External ID, it is also indexed as mentioned earlier. There is another limit that determines the amount of custom indexes per entity. Most likely, you are hitting this limit, who's default is 13. Please log a case with support, providing us an organization ID and what you are looking to do. We can review your current indexes and, with a sufficient business case, increase the limit in some situations.