Cook bacon: Add bacon pieces to a large Dutch oven and heat over medium heat. Cook until crisp and the fat is rendered (they will overlap, then shrink). Remove bacon with a slotted spoon. Pour off all but 2 tablespoons of the grease.
Sauté vegetables: Melt the butter in the 2 TBS bacon grease over medium heat (if omitting bacon, use 2 additional TBS butter or 2 TBS olive oil). Add the onions, carrots and celery and cook, stirring often, until onions are softened; add garlic and sauté 30 seconds. Sprinkle the flour over the vegetables, and cook 2 additional minutes (it will be thick).
Add potatoes: Add the potatoes, broth, evaporated milk, chicken bouillon (don't dissolve in water first) and all seasonings. Bring to a gentle boil and cook, uncovered, for 15-20 minutes, until the potatoes are fork tender.
Make it creamy! Working in batches, remove half of the soup (vegetables and liquid) to a blender along with the cream cheese. Don’t fill the blender more than 1/3 of the way full or it can overflow and explode. Blend until very smooth, being careful to let smoke escape or the blender will explode. You can do this by leaving the blender cap open and covering with a paper towel or loose dishtowel. You may also use an immersion blender but I don’t find the soup gets as smooth.
Season: Stir the pureed soup back into the pot. Taste and season with additional salt, pepper, oregano and/or thyme to taste. If you would like a thinner soup, stir in milk to reach desired consistency. Garnish bowls with cheese, bacon pieces and green onions.