This is exactly the same issue I have, where I have events with the same name. My solution would be to add the article ID number to the front of each alias, thereby making the alias unique. Do you think this would be possible? If not perhaps a random 4 digit number.
I wanted to see if I could concat the alias with the article id, guaranteeing unique alias... here is my code which goes in the afterstore plugin/field. It could probably be a bit more concise and lean...
I get the alias just stored, concat it with the id and store back in the alias db column
// assign pk value
$configPk = $config['pk'];
// Get a db connection.
$db = JFactory::getDbo();
// Create query object
$query1 = $db->getQuery(true);
// get alias from article with id of 'pk'
$query1
->select($db->quoteName(array('alias')))
->from($db->quoteName('#__content'))
->where($db->quoteName('id') . ' = '. $configPk);
// load the result, loadAssoc is for use with arrays. In this instance there is only one value, but other times you might need to get more than one value
$db->setQuery($query1);
$result1 = $db->loadAssoc();
// store the result as variable
$result1Alias = $result1['alias'];
// Create query object
$query2 = $db->getQuery(true);
// select the column to update and with what
$fields = array(
$db->quoteName('alias') . ' = ' . $db->quote($result1Alias . '-' . $configPk)
);
// Conditions for which records should be updated.
$conditions = array(
$db->quoteName('id') . ' = ' . $db->quote($configPk)
);
$query2->update($db->quoteName('#__content'))->set($fields)->where($conditions);
$db->setQuery($query2);
$result = $db->execute();
<br>