Cook Bacon: Add bacon pieces to a large soup pot and cook over medium heat until crisp, about 8-10 minutes. Transfer bacon to paper towel-lined plate and set aside. Drain all but 2 Tablespoons bacon grease from the pot. (If bacon grease looks dark or burnt, wipe out pot completely and replace with 2 Tablespoons butter.)
Sauté Vegetables: Add onion and celery to the reserved bacon grease (or butter, if you're using it instead). Cook over medium heat until soft, about 5-6 minutes.
Add Flour and Garlic: Sprinkle flour and garlic over vegetables and cook, stirring continuously, for 1 minute. The mixture will be thick; stir constantly to avoid burning.
Add Broth, Cream, and Milk: Slowly pour in broth while whisking continuously to prevent lumps. Stir in cream and milk.
Add Remaining Ingredients: Add ham, potatoes, corn, pepper, salt, oregano, and thyme. Stir to combine.
Simmer Soup: Bring soup to a boil, then immediately reduce heat to medium-low to maintain a gentle simmer. Cover pot with lid slightly vented and simmer until potatoes are tender, about 15-20 minutes. Stir occasionally to prevent soup from sticking to bottom of pot.
Add Bacon and Serve: Stir in ⅔ of cooked bacon. Taste soup and season with additional salt and pepper if needed. Serve garnished with remaining bacon pieces and, if desired, chopped parsley.