split string for calculations
Doing string manipulation in SQL is non-optimal for the engine; it's not meant for that kind of row by row processing.  

Your option of using temporary tables to hold intermediary results is going to be your best bet on solving the performance problem.  At least that way it's only split once.  But there are solutions that may work better for you.


Can you modify the import process so the data is split up before it's saved to the database?  
What about importing to staging tables and using either an Agent Job or external process to split the data up into permanent tables?


I'm not sure how much reporting you are doing on older data sets; if you only need to report on the data once or twice then temp tables are probably your best bet.  But if you want or need to do longer term analysis then continually splitting the same data is unnecessarily expensive.  Storage is usually cheaper than CPU.