In a large stock pot or Dutch oven, heat the oil and butter over medium heat. Once melted, add the carrots, celery, and onion. Sauté for 4 to 6 minutes or until just beginning to soften.
Add the garlic and stir for another 30 seconds. (The aroma should be amazing.)
Add the potatoes, ham, chicken stock, a pinch of salt and the white pepper. Stir well.
Add more stock if necessary to just cover the potatoes. Bring the soup up to a simmer. Taste and add salt if desired.
Maintain a gentle simmer and cook the potatoes just until fork tender, approximately 14 to 18 minutes, depending on the size of the dice.
Add 1 ½ cups of the chilled milk to a 2-cup measuring cup. Add the flour and whisk to combine and dissolve the flour.
Add this “slurry” (the milk/flour mixture) to the pot and gently stir. Bring the soup back up to a gentle boil. Continue to stir gently until the mixture has thickened slightly. You can add the remaining ½ cup milk if desired.
Taste and adjust the salt and white pepper according to taste.
Serve in individual bowls. Top with shredded cheese, bacon pieces, and green onions.
Serve warm.