In a saute pan on low heat, caramelize the onion until golden brown in a little olive oil, and season with salt and pepper, stir occasionally, about 30 minutes.
Meanwhile, mix all other meatball ingredients in a large bowl, including onions when they are done.
Form into meatballs and set on a sheet pan. They should be about golf ball size, use an ice cream scoop to portion and then roll in your hands. About 28 meatballs depending on the size. (This can be done ahead of time up to this point and kept in the fridge).
Freeze extra raw meatballs in containers or freezer bags, in portions right for your family (frozen meatballs should be thawed overnight in fridge before cooking).
Preheat oven to 400°.
Heat a large pot or dutch oven with 1 T olive oil and 1 T butter over medium high heat. Brown the meatballs on one side then flip and do the other side (about 2 minutes per side, don't try to flip them too early or they will stick and break).
Cook meatballs in batches so you do not crowd the pan if you are making alot. Don't worry if they break apart a bit in the browning process, that will all become part of the sauce. When done return them to the sheet pan (don’t worry that it had the raw meatballs on them, you will be baking the whole thing).
Place pan in oven for about 15 minutes to cook the meatballs through (you can cut one open to check).
Add meatballs back to the browning pot and add marinara sauce and simmer about 15 minutes or on very low until ready to serve.
Assemble subs on hoagie buns (break meatballs in half if they are too big to fit in the bun) topped with cheese. Bake on a clean sheet pan until cheese is bubbly and bread is toasted.