FWIW,
I believe that the discussion is ignoring the situation. After all, everything is relative :-)
The whole point of this discussion is what is fast enough and what is fastest. For instance, if you wanted to generate a char(32) key for every row in a table, as opposed to a numeric( 32 ) obvious differences occur when the table exceeds certain row limits, (i.e. index depth becomes greater than 3). If you wanted to use a table with 300 rows and decided that you really didn't want to do an additional surrogate key, this might make a lot of sense. But if you are talking about a million rows, or worse, hundreds of millions, or even worse, a higly scalable design with the capability of partitioning the data amongst multiple databases supporting hundreds of billions of rows, then (as most women will agree) SIZE DOES MATTER!
So when you are facing the impossible (something I specialize in every day) then you have to examine every facet of choosing a key. Ultimately, the volumetrics of the data are a driving factor in a decision about surrogate key usage. My advice is when you have the worst case, use an exact numeric datatype (they will compare faster than a comparably sized character datatype), they are typically 1/2 the size of a equally sized character datatype (numeric(38,0) occupies 17 bytes of storage while char(38) always uses 38 bytes.
Your Friendly Neighborhood DBA,
Chuck