1. Комментарии на русском?
2. desc.Contains(name) != false — если выражение и так bool, то дополнительное сравнение с true/false излишне и бесмысленно.
3. IDisposable реализован неправильно.
4. Ну и орфография с пунктуацией, конечно же…
5. Инвертируйте вечный if (isot!=null), будет меньше вложенность.
6. FindMicByName() точно должен отдавать последний микрофон, если ничего не найдёт ByName?
Распознавание с нестандартного микрофона