I used the Tile tool to create 5 manual buckets and then a Formula tool to prefix the letter "R" to the generated [Tile_Num] field. I then joined the two tables on this newly created "Region" field and the pre-existing "Region" field in the other dataset and used a Summarize tool to get the required results.
Text to columns to split the range, rename the new columns to make it easier, count the postal codes, generate rows, use a MRF to identify which rows were errors, then filter them out, formula to create the postal code from start of the range + row number, rename the fields, join with the customer data (after adding a tally column), and sum to result.
My first instinct was that we really need a tool that can handle flexible join conditions other than A=B. Then I decided to use the Append function to essentially do a cross product between the range data and the customer file. I was able to get this to work, but after reading some of the posts I realized this approach was very limited and would not scale well if we had a large set of regions. My final approach used generate rows and then a standard join, giving a much more scalable approach.