Маловероятно, что вы сможете достичь этого без ущерба для Microsoft .Net Install. Вы поймете, что независимо от того, какой API вы вызываете, всякий раз, когда CLR пытается загрузить DLL, он всегда получает ее из GAC, если там существует совместимая версия.
WinForms будет неявно загружать System.Data.dll в нескольких случаях, а CLR будет выполнять проверку GAC. Если вы используете версию WinForms для MS, она будет преобразована в версию MS, которая находится в GAC. Нет способа сломать это без изменения GAC.
Все сборки MS подписаны закрытым ключом, который, AFAIK, mono не может дублировать. Таким образом, кажется, что у вас не будет возможности загрузить свою DLL раньше встроенной библиотеки GAC и, следовательно, нет способа ее заменить.