I don't think getMany() is your problem. I think it's the many calls to getTVValue() which is fairly slow.
TVs are not a very good place to store data, especially if you need to use them in a search. It might speed things up considerably to combine all the TVs into one MIGX TV, which might also be more convenient for entering the data.
Another option that might be faster (and lets you keep your existing TVs) would be a plugin connected to OnDocFormSave which would combine all the TVs into an associative array and save it in the resource's 'properties' field. Then, since you already have the child resources, you can replace all this:
$id = $child->get('id');
$longtitle = $child->get('longtitle');
$startDate = $child->getTVValue('startDate');
$endDate = $child->getTVValue('endDate');
$eventlink = $child->getTVValue('eventlink');
$country = $child->getTVValue('country');
$nameid[$index]['id'] = $id;
$nameid[$index]['startDate'] = $startDate;
$nameid[$index]['endDate'] = $endDate;
$nameid[$index]['longtitle'] = $longtitle;
$nameid[$index]['eventlink'] = $eventlink;
$nameid[$index]['country'] = $country;
$index++;
with this:
$fields = $child->get('properties');
$fields['id'] = $child->get('id');
$nameid[$index] = $fields;
BTW, you're only getting one resource at the beginning, so the variable name probably shouldn't be $resources.