I don't think you would be able to simulate the collision with every single sand particle. The computation load would be too much. The practical approach could be to set the physics parameters like friction very high so it statistically simulated the sand surface. And if there is other phenomenon that sand exhibits, then write a plugin to include this phenomenon inside the simulation.
When I simulate 1000 balls of 5 cm in radius, the RT factor on my 8 core computer drops to 0.08.
I spawn the 1000 balls into the simulation by putting following code into the world file (gazebo 7).
<population name="ball_population1">
<model name="ball">
<static>false</static>
<link name="ball_body">
<collision name="ball_collision">
<geometry>
<sphere>
<radius>0.05</radius>
</sphere>
</geometry>
</collision>
<visual name="ball_visual">
<geometry>
<sphere>
<radius>0.05</radius>
</sphere>
</geometry>
</visual>
</link>
</model>
<pose>0 0 1 0 0 0</pose>
<box>
<size>4 4 4</size>
</box>
<model_count>1000</model_count>
<distribution>
<type>random</type>
</distribution>
</population>
And I had to restart my computer after that.