Melt butter in olive oil in a large soup pot/Dutch oven over medium heat-high. Add onions, carrots and celery and cook until the onions are tender, about 7 minutes. Add garlic, red pepper (if using) and sauté 30 seconds. Sprinkle in flour and cook an additional 1 minute while stirring (it will be thick). Add the potatoes and all remaining soup ingredients (up to “Add Later).
Cover and bring to a boil, then uncover and reduce to a simmer. Simmer, uncovered, for 15-20 minutes or until potatoes are very tender, stirring often so the bottom doesn’t burn.
Using a potato masher, mash about 1/4- 1/3 of the potatoes (don't worry the other veggies won't really mash that much).
Stir in half and half and ham and heat through.
Remove the soup from the heat, then add the cheese a handful at a time until melted. Discard bay leaves. Taste and season salt/pepper to taste as desired.