For broth, in a 5- to 6-qt. pan, combine onion, carrots, celery, peppercorns, 2 qt. water, and bouillon cubes. Bring to a boil over high heat, cover, reduce heat, and simmer until vegetables are very soft, about 45 minutes. Pour broth through a colander into a bowl. Discard seasonings and return broth to pan. Set aside.
For gefilte fish, pulse half of salmon and lingcod at a time in a food processor until finely chopped; do not purée. Scrape into a large bowl. Whirl onion in processor until smoothly puréed and add to fish with eggs, 1/3 cup matzo meal, pepper, and salt; stir until blended. Mixture should be just firm enough to hold its shape when formed into a ball with your hands. If too soft, stir in 2 to 3 tbsp. more matzo meal.
With your hands, pat fish mixture, 2 tbsp. at a time, into smooth balls and set slightly apart on a plate. Rinse hands frequently in cool water to prevent sticking.
Bring broth in pan to a boil over high heat; adjust heat to simmer. Add enough fish balls to pan to make a single layer without crowding. Simmer, uncovered, until balls are opaque when cut in center, about 10 minutes.
Lift gefilte fish from pan with a slotted spoon and drain on paper towels, draping fish with foil if you'll be serving it warm (see Notes). Repeat to cook remaining fish.
For horseradish sauce, in a bowl, combine sour cream, horseradish, and dill.
Arrange salad greens on individual plates or a platter. Lay fish on greens and accompany with pickles, horseradish sauce, and salt to taste.