Существует другой подход, который вы можете использовать в зависимости от того, как вы используете свою коллекцию. Если вы загружаете назначения один раз (например, когда приложение запускается), вы можете на лету перевести коллекцию в хеш-таблицу, где:
shortname => SPRoleAssignment
Если вы сделаете это, то, когда вы захотите удалить элемент с коротким именем, все, что вам нужно сделать, это удалить элемент из хеш-таблицы по ключу.
К сожалению, если вы загружаете эти SPRoleAssignments много, это, очевидно, не будет более экономичным с точки зрения времени. Если вы пользуетесь новой версией .NET Framework, было бы хорошо, если бы вы использовали другие предложения Linq, но в остальном вам придется придерживаться используемого вами метода.