I would recommend using Machine Learned entities. Instead of trying to list out the entities and account for synonyms, you just tag the entities in the training utterances and it will learn to pick out those entities even if they are not in your training set. This doesn't work so well for misspellings because the spelling will not be corrected in the entity recognition.
Specifically for spelling, I would recommend using a Bing Search resource for spell checking. If you are using v2 of LUIS recognizer, you can add it directly into your definition like so.
const { LuisRecognizer } = require('botbuilder-ai');
// Then within the constructor...
const dispatchRecognizer = new LuisRecognizer({
applicationId: process.env.LuisAppId,
endpointKey: process.env.LuisAPIKey,
endpoint: `https://${ process.env.LuisAPIHostName }`
}, {
includeAllIntents: true,
includeInstanceData: true,
spellCheck: true,
bingSpellCheckSubscriptionKey: process.env.bingAPIKey
}, true);
If you are using v3 of LUIS recognizer, I believe you have to make an API call separately and return the spell-checked result to use in your call to LUIS.