In a large saucepan or small stockpot over medium heat, warm the oil.
Add the onion and cook, stirring occasionally, until starting to be translucent, about 5 minutes.
Add the carrots, celery, and garlic and cook, stirring occasionally, until the carrots and celery are crisp-tender, about 3 minutes.
Add the ham, broth, cabbage, and bay leaves and bring to a boil over high heat. Reduce to a simmer, cover, and cook until the cabbage is tender, 15 to 20 minutes. Add salt and pepper to taste. Remove the bay leaves before serving.
To make ham broth, combine 2 smoked ham hocks, 1 carrot, 1 celery stalk, 1 onion (quartered), 2 bay leaves, 1 teaspoon whole peppercorns, and 4 quarts water in a large stockpot. Bring to a boil over low heat, reduce to a very gentle simmer, cover and cook until the meat falls off the ham hocks, 3 to 4 hours. Strain the broth and add salt and pepper to taste. Makes about 3 quarts.