1. In a food processor or grinder, grind fish (refrigerate heads and bones for later use), 2 onions, 1 stalk celery, and half a carrot. (If you use a food processor, make sure you leave no large pieces of fish or bones; you may want to transfer the mixture, bit by bit, into a wooden bowl, and go over it vigorously with a hand chopper.)
2. Place fish mixture in a large bowl, and add eggs, sugar, salt, pepper, and corn oil, mixing thoroughly with a wire whisk. Stir in matzo meal, and continue to mix until everything is thoroughly blended. Refrigerate for 1 hour or more (longer, even overnight, is better).
3. Fill 2 large stockpots three-quarters full of water, and bring to a vigorous boil. In each, throw in half the fish heads and bones, 2 onions, half the celery, and a carrot. Divide batter into 12 patties of equal size. (Don’t worry that your batter is a little loose; it has to be that way to keep your gefilte fish light.) Transfer each patty to a large cooking spoon, shape into an oval, and very gently lower it into the boiling water. Put 6 in each pot. Lower heat and simmer for 1 ½ hours.
4. Remove fish balls and carrots from pots, and refrigerate on a covered plate. Discard everything else. Serve chilled with red and/or white horseradish. Slice carrots for garnish.