Given a large dictionary of unique words and a list of query strings, return for each query whether it exists in the dictionary. The dictionary may contain up to 1,000,000 words and the query list up to 100,000 strings. Optimize for many queries and minimal memory overhead. Describe your chosen data structure(s), expected time and space complexity, and how you would handle case sensitivity, Unicode normalization, and duplicate queries.