Se ti devi scorrere tutti gli elementi non è che tu possa fare molto diversamente...
In prima battuta comunque già potresti evitarti una marea di lookup di GetElementsByTagName("option") & co. salvandoti il riferimento fuori dal ciclo:
codice:
        private void button2_Click(object sender, EventArgs e)
        {
            foreach (InternetExplorer ie in new ShellWindows())
            {
                if (ie.LocationURL.Contains("aams"))
                {
                    var output = ie.Document.GetElementsByTagName("option");
                    var aggiungi = ie.Document.GetElementsByTagName("input")["aggiungi"];
                    for (int i = 1; i < output.length - 1; i++)
                    {
                        if (output[i].InnerText.Contains("testo da cercare"))
                        {
                            output[i].SetAttribute("selected", "true");
                            aggiungi.Click();
                            break;
                        }
                    }
                    // eccetera
Ma sospetto comunque che il grosso del tempo siano le millemila chiamate al codice JavaScript della pagina.