Sí, es posible, pero un poco complicadillo. Se usa la clase CSharpCodeProvider
y se le pasan parámetros para decirle cómo lo quieres compilar. Una de las opciones es "GenerateInMemory", que te deja el resultado ya cargado, y entonces lo mandas ejecutar mediante System.Reflection.
En la documentación de MSDN tienes un ejemplo, aunque en este ejemplo pone GenerateInMemory=false y lo compila a un archivo en disco, cosa que en tu caso no te conviene. Pero te puede servir como punto de partida para ir estudiando cómo se usa, y a partir
de ahí puedes ir mirando las distintas opciones.
https://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider(v=vs.90).aspx
Una precaución: Si esto lo vas a hacer repetidamente, es decir, vas a ir metiendo nuevos textos o nuevos archivos y los vas a ir compilando uno tras otro, irás consumiendo la memoria poco a poco. Esto se debe a que el código que compila va quedando cargado
en memoria y nunca se descarga. El remedio para esto es crear un AppDomain y cargarlo en el AppDomain, y luego descargar el AppDomain. Esto te agrega un grado más de complejidad, por si no era ya bastante complicado usar el CSharpProvider, por no hablar de
luego usar Reflection para ejecutar el ensamblado resultante. Por eso te decía al principio que era "complicadillo".