I am writing a web application, that is US specific, so the format that other countries use for postal codes are not important. I have a list of us zip codes that i am trying to
char(5) is the correct way to go. String indexing is quite fast, particularly when it is such a small data set.
You are correct in that you should never use an integer for a zip code, since it isn't truly numeric data.
Edit to add: Check out this for good reasons why you don't use numbers for non-numerically important data: Is it a good idea to use an integer column for storing US ZIP codes in a database?