ActionとかFuncのInvoke自体は、普通のデリゲートコールなので遅くない。

Action a => () => { } ;
a(); と a.Invoke() は、同じことをやっている。
null伝播使うとき、 ?.() という書き方ができないので、?.Invoke() にしてあるだけだ。
もちろん、普通のメソッドに比べれば、インライン化されないなどの僅かな差はあるだろうが、気にするほどではない。

遅いのは、>>848がやってるようなリフレクションだ。
こいつは、桁違いで遅い。ExpressionTreeで実行時にデリゲートを構築してやれば、速度の問題はある程度解消できるだろう。
あとは細かいところで変数のキャプチャ、ボックス化が生じてパフォーマンス低下につながることになる。