In a large, heavy saucepan, combine olive oil and butter.
Place saucepan over medium-low heat and melt butter.
When oil and butter are hot and shimmering, but not burnt, add onions. Cook, uncovered, until completely softened and pale golden, about 15 minutes.
Add carrots, celery and ham. Cook about 4 minutes.
Add to cabbage. Cook 5 minutes more.
Add water, ham hock and tomatoes with the juice (crush tomatoes gently with your hands before adding or with a wooden spoon in the saucepan).
Add a little salt.
Stir gently, but thoroughly. Cover and adjust the heat to a very gentle simmer.
Cook for 2 1/2 hours.
Add cannellini beans, green beans and zucchini. Continue to for about 15 minutes.
And pasta. Cook for 15 minutes more, stirring occasionally. The mixture should be fairly dense. If the soup becomes very thick, you can dilute it with a little water or broth.
Add black pepper. Taste. Add more salt and pepper, if needed, to taste.
Remove the ham hock, set aside and let it cool.
Add spinach. Cook for 2 minutes, just to wilt.
While spinach is wilting, pick meat from the ham hock, discarding the fat, skin, and bones. Add meat back to the soup.
Serve hot with grated cheese on the side.