performance issue creating many objects
Clean Factory Settings Operator

Using the method outlined in 
How to completely remove all loaded data from Blender?  particularly the accepted answer

replacing iterative object and mesh removal with operator, has a marked improvement in keeping times consistent between benchmark loops.

def remove_geometry():
    bpy.ops.wm.read_factory_settings(use_empty=True)
    return


Other minor change suggestions


Have a feeling can remove mesh update
Zero pad base name base_name = 'object_%04d' % obj_number
Somewhat pedantic Calling remove_geometry
first in loop will require one less call. 


Related 

Object creation slows over time