Mícháte zde dohromady několik nesouvisejících věcí. Volání knihovní funkce z "dřevních" jazyků jako C(++), Fortran atp. není zatíženo žádnou režií. Na příslušná místa se nasází parametry volané funkce a procesor pak odskočí na adresu, kde kód volané funkce začíná. Rozdíl mezi staticky a dynamicky linkovanou knihovnou je jen v tom, že u dynamicky linkovaných knihoven je nejdřív nutné zjistit, kde v paměti se kód volané funkce nachází. To se provede buď hned při spuštění programu nebo v okamžiku, kdy se ta funkce zavolá. Provede se to ale vždy jen jednou. Staticky linkované knihovny se stanou součástí zkompilované binárky a vše se tedy může zařídit už při překladu.
Režie .NET spojená s voláním nativního kódu je zcela nesouvisející problém. Pokud něco podobného umožňuje Mono nebo .NET Core, čekal bych nějaký overhead i na Linuxu.