Panda Bullet

Both, better performance (in most cases) and less memory. Also consider that the transforms passed to Bullet come from Panda3D nodes and Panda3D is compiled with single precision by default. It does not make sense to have double precision computation for physics if all input is delivered in single precision.
→ Default is single precision Panda3D and single precision physics
→ If you need you can compile yourself and SETUP both Panda3D and Bullet for double precision.

Huh? As far as I know one lightyear is 10e11 meters and not 10e100. Anyway, I didn’t say you should scale to 1 unit = 1 ly. I said you should choose a reasonable scale, which depends on the sizeof your objects AND the spacing between your objects.

I don’t think you have 3 meter large objects which are separated by 1 lightyear. Consider that at a distance of 100 km your 3-meter-object would be less than one pixel on your screen. 3D graphics simply don’t make sense at such scales.

So please disclose how large your objects are and what the distances between your objects are.

I think there is a bit of a misunderstanding here. sure, you can have multiple worlds at the same time, and these worlds can overlap. But there won’t be interaction BETWEEN the worlds, i. e. objects from one world colliding with objects of another world.
Sidenote: PhysX offer such a feature.

What I meant is to divid your universe into smaller areas, and do physics simulation only for the local area. When moving on to another area stop simulating the first area and continue with the next area. There can be overlap between areas, of course. The main difficulty is to write a manager which activates/deactivates areas.

It’s up to you if you use one BulletWorld instance for each area, or re-use a single BulletWord instance.