Heat olive oil in a large, thick-bottomed pot or Dutch oven on medium high heat. Add the onions, carrots, and celery, and sauté for 7 to 8 minutes. Add the garlic and cook for one minute more.
Using kitchen twine, tie the thyme and the parsley into a bouquet garni.
Add the ham stock to the softened vegetables and bring to a boil. Reduce the heat to medium low and add the potatoes, bay leaves, and pepper. Taste for salt. Allow soup to simmer for 1 hour. Contents of pot will evaporate by about 1 cup during the simmer.
In a nonstick frying pan, heat the bacon fat. Add the ham bits and scorch, almost to the point of burned but not quite. I find this is easiest to achieve minus the burn over medium heat for about 12 to 15 minutes and constantly moving in the hot pan. Once sufficiently crisped, off heat and wait for soup to finish it's simmer.
Once the soup has finished its simmer, off heat the pot. Using an immersion blender, puree half to most of the solids in the pot. You have cart blanche here in that if you want a chunkier soup, you can leave most of the solids in tact or pulse entirely for a relatively smooth soup.
Reserve 1/2 cup of the crisped ham bits. Add the remaining ham bits, all pan juices, and the heavy cream to the pureed soup. Taste for salt. Return the pot to a burner over low heat and simmer for an additional 1/2 hour, stirring frequently to prevent any bottom sticking.
Plate the soup by ladling into a shallow but wide soup bowl. Garnish with a teaspoon of the reserved crisped ham bits. Offer additional optional garnishes such as sour cream, snipped chives, or shredded cheddar tableside.