You are a Python developer. Write a script that splits a large CSV file into multiple smaller files based on number of rows. The script must: 1) Accept input CSV, number of rows per file, output prefix, 2) Preserve header row in each split file, 3) Handle large files efficiently (streaming), 4) Provide option to split by columns, 5) Log progress, 6) Add error handling for missing file. Add comments.