It seems simpler in the long run to add the extra 'current' field, and like it would be more performant, but is it also bad practice?
If your table absolutely has to be SCD, it's a good idea.
For 99% of queries we will be searching the entire table and filtering by additional columns and join tables. For these queries we're only interested in the most recent version of a record per unique ID. We will also be sorting by created_at and other columns.
If that's the case, you might seriously consider keeping just the latest records in your OLTP database/table and move the SDC to the data warehouse (or at least another table).
Erik's answer suggests creating a filtered index, which, in essense, is doing just that: creating a shadow copy of subset of your data, slicing it both vertically (just the key and included columns) and horizontally (the filtering condition).
If you need to sort by created_at and other columns, you might want to create additional indexes that would help you sort by created_at and other columns. All these indexes (which are also shadow copies of subset of your data) would need to include your boolean flag as a filtering condition.
The good thing is that all these shadow copies will be maintained by the database automatically.
Here are some not so good things:
Your old records are still there taking up space in the heap/clustered index and in the buffer pool. If your query ends up not being completely servable by filtered indexes, it will have to spend IOPS, RAM, and CPU cycles on reading and filtering out historical data.
You will have to include the filtering condition into every query you write. In some databases, this might be eliminated by using a view, but not all databases support updating views.
The optimizer will less likely come up with efficient plans. Even if it does, it will take it more time to build these plans. If you are using Entity Framework or its friends, or generate a lot of dynamic SQL in other ways, your system will take extra performance hit, which can vary from negligible to serious, but will always be there.
In some databases (like older versions of SQL Server), the implementation of filtered indexes has a lot of bugs, especially if you use them in combination with things like the MERGE statement, indexed views etc.
The last three bullet points are important even if the table in question is small.
The downside of splitting the table in two is, of course, that you will have to create an extra ETL pipeline, or triggers, or otherwise keep these tables in sync. The upside is that your OLTP table will be smaller, simpler and easier for everyone (you and the optimizer) to work with.
If you already have a separate data source for analytical workloads, and your queries against historical data don't require transactional consistency, moving historical data out of the OLTP database will most likely make your life easier in the long run.