Random weighted number using Chainlink VRF

I'm trying to do weighted random numbers using a random number returned from Chainlink VRFv2. Let's say I was minting 10,000 NFTs and wanted to assign a random trait to each one during mint with percentage weights -- would this be the best approach or is there a better way that would save more on gas? pseudo-code:

function fulfillRandomWords(uint256[] memory randomWords) {
    uint256 memory rand = randomWords[0] % 1000;

    if (rand > 0 && rand < 100) // 10% chance
    if (rand > 100 && rand < 300) // 20% chance
    // and so on...
}

Chainlink VRF is good, but you may want to try this, an on-chain Gaussian RNG. Super fast and gas-efficient. Most importantly, it's Gaussian. It sounds like it suits your case perfectly since most of random numbers are Gaussian in the real world. Check it out!