Suppose I have a character like this:

Note that the model is not actually made from voxels, it’s just a normal mesh which is textured to give the impression.
Now, this little knight should explode into a colorful shower of tiny voxels;
So far, I have tried the folowing:
1.) Create a “voxelized” version of the model beforehand as a prefab. This would be a bunch of tiny cubes with rigidbodies and colliders. Then, AddExplosionForce is used with each cube.
Pro: Accurate collisions and nice bouncy-bouncy effect
Downside: pretty laggy when instantiated more than ~20 cubes at a time because I have to loop through each and add the explosion force.
2.) Instantiate a ParticleSystem with pre-defined colors and tiny cubes as the particles’ mesh.
Pro: Fast
Downside: The collision detection with mesh particles is not collider-based, so the collision only registers at the particle’s center point. This makes all the cubes lie on the ground halfway sunken in. Particles don’t behave realistically on collision (no rotation for example).
Are there any other ways I’m not aware of, or ways to make the two methods better?
As you mention, create an “explosion” version with many cubes making roughly the shape. Then simply add a sphere collider at the right time and leave on for around 0.2 seconds. I have used this and looks great and runs well on mobile. You will need to position and size the sphere collider right for best effect. Also, move the explosion pieces around a bit to tweak for the best effect. You will need a rigidbody and box collider attached to each of the explosion pieces.
I also created object pooling for these grand explosions. This was more complicated but if you are interested please let me know. If you have lots of these explosions going off you should definitely look into this. Basically I create a master of the original explosion before and then when recycling my object I reset the position and rotation of all the pieces. This was a lot more complicated than object pooling for a simple object.
If you go with route #1, unless it’s absolutely necessary to have per-cube collision detection (which I would doubt), I would simply put box colliders (maybe 1 on his body, and 1 on each arm) on the prefab and detect collision via those.
When it collides and needs to explode, just Destroy() that original character prefab GameObject and instantiate a particle system of cubes in it’s place.