In a Dutch oven or other large pot, heat the butter over medium heat and add the diced bacon, pancetta, etc. This seems like a lot of fat, but the bread absorbs it. Cook until the meat is crispy, then remove it with a slotted spoon for later.
Add the onion and cook until it turns translucent, about 4 to 6 minutes. Add the garlic and cook 1 minute. Stir in the bread, making sure to coat it all well.
Pour in the stock and bring to a simmer. Cook, stirring occasionally, until the bread is about half broken down -- you want it to still have a little structure at the center of the cubes.
When that happens, drop the heat to low and stir in the cheeses until well combined. Turn off the heat and serve with the parsley and bacon bits and pepper on top.
Notes
You can use bacon, guanciale, pancetta or anything similar here. If you want to reduce the fat, skip the butter. If you can't get gruyere, just use more parmesan, or pecorino. If you can find it, the ideal cheese would be montasio, but it's tough to find in the United States. I use grouse or venison stock, but use what you have handy -- just nothing too dark.