Как правильно сделать выборку из листа?
map = list. stream().collect(groupingBy(Db::getForm)) ;
Если на 8 уже.
Наверное, самое правильное будет - получить из базы отсортированный по фирме список. SORT BY. Потом - один проход по этому списку и вывод куда вы там хотите.
Если задача стоит именно со списком, сразу на ум приходят два варианта - 
1) Посортировать список по фирме и далее -  в один проход. O(nlogn) сложность по времени.
2) Если не особо важен порядок. Идти по списку и складывать элементы в Map<String, List<String>>очевидным образом. O(n) по времени, O(n) по памяти. В конце обойти мапу.