Scott
I use char keys in several situations similar to what you are describing and have not had any issues with using them speed or otherwise. Of course I don't have 20 million records and a website that is getting 10,000 hits a minute. I have almost 2 million recs in a table that has a compound (char(5) + char(10)) primary key and I am happy with the performance.
I guess it would depend on how big your data is and will become and what you mean by performance. You have existing data already so why not set up both scenarios and do some tests to see what the real difference is. To me a few milliseconds or even a second might not be that big a deal but you might think it is the end of the world.
So, I won't tell you what to do because it's your database, but basically, the argument is that using integer PKs is the standard way to normalize a database, but you have to trade normalization for ease of use. And for those that argue speed... if you don't have to do a lookup or a join because you know the pk and the pk is human readable, then you're actually requiring less from SQL Server, so it's certainly going to be faster to use a character pk because there will be fewer queries and joins.
Hope that helps
I should mention that the transaction codes are not arbitrary, the values are like "PAY,NOT,NC" and the action of the transaction is determined by these specific code values, so if integer keys are used, any time I want to process a transaction I would have to lookup the code to determine the appropriate action.
I have several other tables that are in a similar type situation, like schedule codes and appointments. So am I wrong here or should I use the character keys in situations like these.