You could set a volume (dimensions) to your paid shipping items and no volume for the others. Then, in the free shipping method, set a maximum volume of 0.01 and a minimum volume of 0.01 for the paid shipping method.
Then, the system will show only to appropriate shipping method based on the volume of the products in the cart.