Hi, sorry for the english, I don´t think Godot physics are slow, Godot render maybe, I never have "Physics" problem. A bit of tips:
Every kind of object have their own layer, (Example: Character: layer 1, Bullet: layer 2, Enemy: layer 3....)
A phisics object that doesn´t collide with itself do not have to "mask" itself: Example : Character is layer 1, Character masks layer 2 (bullet) and layer 3( enemy)... bullets probably doesn´t mask any object, cause probably doesn´t have gamecode and can be accesed by "body" or "area" collision in character to destroy in collision....
If needed more performance collisions (in terms of cpu cycles) use "area_enter" (body or area), it will skip very fast movement, but are a lot performance.
Change "Cell size" parameter in options.
Delete any phisic´s object that end his function (Ej: areas that complete statements in object at "_ready" but doesn´t have functionality in "runtime".
My game have more that 2000 nodes in every level, one of the levels have more that 10.000 nodes. Problem that i have is with "draw calls" and with "charge times", but not with physics, never have more that 800 collisions pairs and any of the objects have their own "area". Don´t abuse from kinematics, I think that it can be the problem, your bullets should be areas and not have any mask bit toggled true.