Estoy haciendo un sistema de "favoritos" en donde se guardan ID's de registros separados por comas en un campo memo (el contenido es similar a "BUE001, BUE002, CAT003, SFE156, ..., ETC000")
Los registros, los ID's separados por coma, son como máximo 2169 ya que corresponden a la totalidad de los municipios que hay en argentina y cada ID tiene un largo de 6 caracteres. Lo que da un máximo posible de 15182 caracteres (2169 * 6 + 2168 comas)
Ahora bien... El usuario puede manipular el contenido agregando más ID's o eliminando otros. Claro está que puede confundirse y agregar uno o más ID dos o más veces a este string separado por comas y el sistema se lo debería impedir. Un error grave que puede cometer es agregar a un nuevo grupo todos los registros (2169) y luego agregarlos nuevamente.
En un comienzo se me había ocurrido hacer un split (por la coma) del contenido actual y un split del contenido a agregar y comparar 1 a 1 si está duplicado. Suponiendo que el contenido actual sea de 2000 registros e intente agregar 1 más, serían 2000 comparaciones y realmente no me pareció mucho... pero viendo que puede pasar una situación como la arriba marcada en azul, serían 2.169 * 2.169 = 4.704.561 comparaciones (situación totalmente absurda en ese hipotético caso... pero me gusta ser extremista =)... y ahora SI me resulta como muuuucho

La pregunta, luego de planteado y ejemplificado el tema de la mejor manera que pude, sería la siguiente:
Cuál sería la forma más efectiva (o menos "consume recursos") de buscar una subcadena dentro de otra, verificar que la primera no exista en la segunda y finalmente anexarla?
Por ahora no pretendo nada más que teoría... el código lo haré en base a sus opiniones y si no me sale les pido ayuda

Saludos y gracias por leer todo este palabrerío insoportable
