The thing that stops products without the VisibleIndividually flag being returned in search results is
this line in the Search ActionResult of the CatalogController which sets the visibleIndividuallyOnly parameter to true:
//products
products = _productService.SearchProducts(
categoryIds: categoryIds,
manufacturerId: manufacturerId,
storeId: _storeContext.CurrentStore.Id,
visibleIndividuallyOnly: true,
priceMin: minPriceConverted,
priceMax: maxPriceConverted,
keywords: searchTerms,
searchDescriptions: searchInDescriptions,
searchProductTags: searchInProductTags,
languageId: _workContext.WorkingLanguage.Id,
orderBy: (ProductSortingEnum)command.OrderBy,
pageIndex: command.PageNumber - 1,
pageSize: command.PageSize,
vendorId: vendorId);
model.Products = PrepareProductOverviewModels(products).ToList();
If you were to change the visibleIndividuallyOnly parameter to false then the search function should return all products on searches whilst leaving the usual category display functionality unchanged.
I've not tried it but I think it should work, the only thing I'm not sure about is what those returned single products would link to since they wouldn't usually have their own urls. Maybe they would link to their parent Grouped product or maybe it would require further code changes.